Telegram Group & Telegram Channel
🧩 Задача для SQL-аналитиков: "Пропавшие продажи"

📖 Описание задачи

У вас есть таблица sales, где хранятся данные о продажах:


CREATE TABLE sales (
sale_id INT PRIMARY KEY,
sale_date DATE,
product_id INT,
quantity INT,
price DECIMAL(10,2)
);

INSERT INTO sales (sale_id, sale_date, product_id, quantity, price) VALUES
(1, '2024-01-01', 101, 1, 100.00),
(2, '2024-01-02', 102, 2, 150.00),
-- ...
-- остальные данные
;


Каждый день формируется отчёт, где суммируются продажи по дням:


SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;


Вчера сумма в отчёте была 1,000,000. Сегодня — 980,000, хотя новых записей не удаляли.

📝 Ваша задача:

1. Найти, какие записи "исчезли" из отчёта, если данных в таблице sales фактически не удаляли.
2. Определить, почему эти записи больше не попадают в итоговый запрос.
3. Исправить отчёт, чтобы сумма снова стала 1,000,000.

Ограничения:

- Таблица не изменилась по количеству строк.
- Никто не менял код запроса.
- sale_date, quantity, price остались без изменений.

Подсказка: возможно, дело в NULL, JOIN или неправильной агрегации.

🕵️ Что проверяет задача:

- Знание SQL-агрегации
- Понимание NULL и работы SUM
- Умение анализировать запросы «не через код», а через их результат
- Навык находить «скрытые» ошибки данных (например, sale_date стал NULL)

💡 Решение:

При проверке выяснится, что часть записей имеет `sale_date = NULL` (например, кто-то обновил поле
sale_date на NULL).

Итоговый запрос:

```sql
SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;
```

не учитывает строки, где `sale_date IS NULL`, потому что
GROUP BY игнорирует NULL как отдельную группу (не попадает ни в один существующий `sale_date`).

Чтобы увидеть эти записи:

```sql
SELECT sale_date, COUNT(*), SUM(quantity * price)
FROM sales
GROUP BY sale_date;
```

Для восстановления суммы нужно добавить обработку NULL, например:

```sql
SELECT COALESCE(sale_date, 'unknown') AS sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY COALESCE(sale_date, 'unknown');
```

Теперь сумма снова будет 1,000,000, а "пропавшие" продажи попадут в отдельную категорию
unknown.

🎯 Эта задача учит:

Всегда думать о данных, а не только о коде
Проверять поля на NULL даже там, где их не ожидаешь
Уметь объяснять ошибки «бизнес-заказчику», а не только исправлять запрос

🔥 Отличная тренировка внимательности и понимания нюансов SQL-агрегации!

@sqlhub



tg-me.com/sqlhub/1872
Create:
Last Update:

🧩 Задача для SQL-аналитиков: "Пропавшие продажи"

📖 Описание задачи

У вас есть таблица sales, где хранятся данные о продажах:


CREATE TABLE sales (
sale_id INT PRIMARY KEY,
sale_date DATE,
product_id INT,
quantity INT,
price DECIMAL(10,2)
);

INSERT INTO sales (sale_id, sale_date, product_id, quantity, price) VALUES
(1, '2024-01-01', 101, 1, 100.00),
(2, '2024-01-02', 102, 2, 150.00),
-- ...
-- остальные данные
;


Каждый день формируется отчёт, где суммируются продажи по дням:


SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;


Вчера сумма в отчёте была 1,000,000. Сегодня — 980,000, хотя новых записей не удаляли.

📝 Ваша задача:

1. Найти, какие записи "исчезли" из отчёта, если данных в таблице sales фактически не удаляли.
2. Определить, почему эти записи больше не попадают в итоговый запрос.
3. Исправить отчёт, чтобы сумма снова стала 1,000,000.

Ограничения:

- Таблица не изменилась по количеству строк.
- Никто не менял код запроса.
- sale_date, quantity, price остались без изменений.

Подсказка: возможно, дело в NULL, JOIN или неправильной агрегации.

🕵️ Что проверяет задача:

- Знание SQL-агрегации
- Понимание NULL и работы SUM
- Умение анализировать запросы «не через код», а через их результат
- Навык находить «скрытые» ошибки данных (например, sale_date стал NULL)

💡 Решение:

При проверке выяснится, что часть записей имеет `sale_date = NULL` (например, кто-то обновил поле
sale_date на NULL).

Итоговый запрос:

```sql
SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;
```

не учитывает строки, где `sale_date IS NULL`, потому что
GROUP BY игнорирует NULL как отдельную группу (не попадает ни в один существующий `sale_date`).

Чтобы увидеть эти записи:

```sql
SELECT sale_date, COUNT(*), SUM(quantity * price)
FROM sales
GROUP BY sale_date;
```

Для восстановления суммы нужно добавить обработку NULL, например:

```sql
SELECT COALESCE(sale_date, 'unknown') AS sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY COALESCE(sale_date, 'unknown');
```

Теперь сумма снова будет 1,000,000, а "пропавшие" продажи попадут в отдельную категорию
unknown.

🎯 Эта задача учит:

Всегда думать о данных, а не только о коде
Проверять поля на NULL даже там, где их не ожидаешь
Уметь объяснять ошибки «бизнес-заказчику», а не только исправлять запрос

🔥 Отличная тренировка внимательности и понимания нюансов SQL-агрегации!

@sqlhub

BY Data Science. SQL hub


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/sqlhub/1872

View MORE
Open in Telegram


Data Science SQL hub Telegram | DID YOU KNOW?

Date: |

Mr. Durov launched Telegram in late 2013 with his brother, Nikolai, just months before he was pushed out of VK, the Russian social-media platform he founded. Mr. Durov pitched his new app—funded with the proceeds from the VK sale—less as a business than as a way for people to send messages while avoiding government surveillance and censorship.

Data Science SQL hub from ca


Telegram Data Science. SQL hub
FROM USA